After its completion, a program typically undergoes beta tests to make sure that it works as specified. The beta test is an expensive and time consuming process requiring special software and knowledge. Even after the beta testing we aren't sure that a program works as specified. Such assurance can be achieved if all the paths of a program are examined and such a test is immense. The problem is bigger and more complex because a software system has hundreds and even thousands of cooperating programs. A program is correct, if it has operational correctness and semantics correctness. Operational correctness determines that a program uses and produces the expected data values. Semantic correctness determines that the rules of processing the order of the statements produce the intent of the program.
The uncertainty of program correctness is derived from the fact that programmers find partial help in developing correct programs and that is the syntax of statements. An error in the syntax of a statement is immediately identified by the host compiler but not its operational correctness; there are no general rules for their identification and thus they have to be developed explicitly by the programmer and as the programmer perceive the correctness. A program isn't just a pile of statements; it is a combination of statements whereas their order of process determines the intent of the program. No programming language can independently declare the operational and the semantic correctness of a program; they don't support such syntax and this inability has many ill consequences.
The operational correctness of a statement is explicitly determined by the programmer including the order of processing the statements of a program. Since they cannot be declared by the current programming languages, we aren't sure that they are used correctly. Moreover, the order of processing the statements is expressed by using operational statements. Hence, it is not clear what the use of a statement is: for manipulation of data or for manipulation of the order of statements. A program becomes complex because it is a mixture of non-homogeneous functional statements hence it is difficult to understand its logic.
The design and development of a system is time consuming and costly because they are better understood with the time. Currently, the logic of a system is rigid because it is described in operational statements and such statements conceal the intent. A change in a system's specifications implies changes in the system's application programs and perhaps in a complex way. Hence, programs may have to be modified, rewritten, or added. It is obvious that it is difficult to estimate the development time and cost of the system under these conditions.
The maintenance of a system is a paramount requirement because a system is written once but it is changed many times in its life time. The maintenance of a system requires the programs to be understood by programmers who perhaps didn't write the original programs. Understanding programs, we are interested in the way a program works or what the statements do and the way they are ordered. Currently, statements used for ordering are alike with the operational statements. Hence, it takes time and activities out of the ordinary to determine how a program works and if a system has hundreds of programs this becomes an immense task. The logic of a program is hidden in operational statements making the system dependent on a few programmers because statements don't reveal their purpose easily without interpretation. Moreover, training new employees is difficult including the education of customers.
Undoubtedly the development of a program takes effort, money, and time. It would be uneconomical to develop a program's structure from scratch every time one is needed. It would clearly be desirable to have a method and system to represent the control follow of a program in a standardized manner so that control code can be generated from such a representation.